package com.yesido.moshi.moshi23.proxy;

/**
 * @author yesido
 * @description 代理测试
 * @date 2023-06-12 13:38
 * @Version 8.3
 */
public class Test {
    public static void main(String[] args) {
        //创建目标对象:用接口来接收是完全可以的
        ITeacherDao target = new TeacherDao();
        //给目标对象创建代理对象,返回的代理对象需要强转为ITeacherDao(因为传入的target对象实现了ITeacherDao接口)，否则没有办法调方法
        ITeacherDao proxyInstance = (ITeacherDao) new ProxyFactory(target).getProxyInstance();
        //System.out.println(proxyInstance);//输出proxyInstance的类型是TeacherDao
        //proxyInstance=class com.sun.proxy.$Proxy0 输出的这个结果表示内存中动态生成了代理对象($...)
        System.out.println("proxyInstance=" + proxyInstance.getClass());

        //通过代理对象调用目标对象的方法
        //调用流程：proxyInstance.teach()->匿名类 invoke()
        proxyInstance.teach();
        //进入invoke()中后：method就是sayHello(..),args就是tom
        proxyInstance.sayHello("tom");
    }
}
